package io.dy.utils;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author dmj
 */
public class CollectionsUtils {

    /**
     * 计算可切分次数
     *
     * @param size   需要分割的集合长度
     * @param maxNum 集合最大的数量
     * @return 切分次数
     */
    private static Integer countStep(Integer size, Integer maxNum) {
        return (size + maxNum - 1) / maxNum;
    }

    /**
     * 将一个集合进行分割
     * @param collections 需要分割的集合
     * @param maxNum      集合最大的数量
     * @param <T>
     * @return 分割后的集合
     */
    public static <T> Collection<Collection<T>> subCollection(Collection<T> collections, int maxNum) {
        int limit = countStep(collections.size(), maxNum);
        //获取分割后的集合
        return Stream.iterate(
                0, n -> n + 1).limit(limit).parallel().map(
                a -> collections.stream().skip(a * maxNum).limit(maxNum).parallel()
                        .collect(Collectors.toList())).collect(Collectors.toList());

    }


    public static <T> List<List<T>> subList(List<T> collections, int maxNum) {
        int limit = countStep(collections.size(), maxNum);
        //获取分割后的集合
        return Stream.iterate(
                0, n -> n + 1).limit(limit).parallel().map(
                a -> collections.stream().skip(a * maxNum).limit(maxNum).parallel()
                        .collect(Collectors.toList())).collect(Collectors.toList());

    }

}
